package vip.liux.contracts.security.core.extensions;


import java.util.Optional;

/**
 * 提供用于存储用户身份验证令牌的抽象接口。
 *
 * @param <TUser> 封装用户的类型。
 */
public interface IUserAuthenticationTokenStore<TUser> extends IUserStore<TUser> {
    /**
     * 为指定用户设置令牌值。
     *
     * @param user          用户对象。
     * @param loginProvider 令牌的认证提供者。
     * @param name          令牌名称。
     * @param value         令牌值。
     */
    void setToken(TUser user, String loginProvider, String name, String value);

    /**
     * 删除指定用户的令牌。
     *
     * @param user          用户对象。
     * @param loginProvider 令牌的认证提供者。
     * @param name          令牌名称。
     */
    void removeToken(TUser user, String loginProvider, String name);

    /**
     * 获取指定用户的令牌值。
     *
     * @param user          用户对象。
     * @param loginProvider 令牌的认证提供者。
     * @param name          令牌名称。
     * @return 令牌值，若无则为 Optional.empty()。
     */
    Optional<String> getToken(TUser user, String loginProvider, String name);
}